首先來看題目和題示,知道解題方向要往 apk decompile 著手。
hint 1:Decompile
hint 2:mobsf or jadx
一樣,使用 ls
查看下載了甚麼,並使用 file
查看詳細資料。
$ ls
timer.apk
$ file timer.apk
timer.apk: Zip archive data, at least v0.0 to extract, compression method=store
在開始解題前,先了解什麼是 apk。
APK 是 Android application package 的縮寫,就是組成 app 的程式碼和資源所包裝起來的 package。
簡單來說,APK 由三個重要的元素構成:
回到解題,我們要將 apk decompile,提示 2 中有提供兩種工具 mobsf 和 jadx,若您想使用 mobsf 但不想安裝,可以搜尋 mobsf online,詳情參考:懶人救星-mobsf-online-快速簡介。不過在這裡我選擇使用 apktool
。
於是我使用 apktool d
這個指令將 timer.apk 解壓縮。
$ apktool d timer.apk
I: Using Apktool 2.3.4-dirty on timer.apk
I: Loading resource table...
I: Decoding AndroidManifest.xml with resources...
I: Loading resource table from file: /home/s109056003/.local/share/apktool/fram
ework/1.apk
I: Regular manifest package...
I: Decoding file-resources...
I: Decoding values */* XMLS...
I: Baksmaling classes.dex...
I: Baksmaling classes3.dex...
I: Baksmaling classes2.dex...
I: Copying assets and libs...
I: Copying unknown files...
I: Copying original files...
若您在使用 apktool 時出現 java 的 error,請下載 openjdk 解決問題。
$ sudo apt install openjdk-11-jdk
decompile 成功後,可以看到多了一個 timer 的資料夾。
$ ls
timer timer.apk
接著使用 grep -R 'pico'
,在所有資料夾中遞迴找關鍵字 'pico' ,就可以得到 flag。
$ grep -R 'pico'
Binary file .script.sh.swp matches
script.sh:grep -R pico
timer/smali_classes3/com/example/timer/BuildConfig.smali:. field public static f inal VERSION_NAME:Ljava/lang/String; = "picoCTF{t1m3r_r3v3rs3d_succ355fully_174
96}"
timer/apktool.yml: versionName: picoCTF{t1m3r_r3v3rs3d_succ355fully_17496}
小結:
了解什麼是 APK,並且會使用 apktool
decompress。